#!/bin/bash
# 脚本名称：sync_usb-1024g_to_win11-r.sh
# 功能：将USB设备文件同步到Windows共享目录，自动排除系统特殊目录，显示详细中文操作日志


# ==== 配置同步路径（可根据实际情况修改）====
SOURCE_DIR="/vol2/1000/mydisk/usb_1024g/"   # 源路径（USB设备挂载点）
DEST_DIR="/vol2/1000/samba/win11-R/"       # 目标路径（Windows共享挂载点）


# ==== 中文提示：脚本开始执行 ====
echo -e "\033[32m=============================================\033[0m"
echo -e "\033[32m[脚本开始] USB设备到Windows共享目录同步任务\033[0m"
echo -e "  源路径：$SOURCE_DIR"
echo -e "  目标路径：$DEST_DIR"
echo -e "  排除目录：\$RECYCLE.BIN、System Volume Information、Recovery（Windows系统目录）"
echo -e "\033[32m=============================================\033[0m\n"


# ==== 执行rsync同步并捕捉操作日志 ====
echo -e "---------------------------------------------"
echo -e "\033[33m[开始同步] 正在比对文件差异，执行同步操作...\033[0m"
echo "  （同步过程中会显示进度，删除操作会标记[删除]）"
echo -e "---------------------------------------------"

# 执行rsync命令，将输出保存到临时变量，同时在终端显示
SYNC_LOG=$(rsync -avhz --progress --delete-delay \
  --exclude='$RECYCLE.BIN' \
  --exclude='System Volume Information' \
  --exclude='Recovery' \
  "$SOURCE_DIR" "$DEST_DIR" 2>&1)

# 将日志中的英文提示替换为中文
SYNC_LOG=$(echo "$SYNC_LOG" | sed 's/sending incremental file list/发送增量文件列表/g')

# 记录rsync退出码（0=成功，非0=失败）
SYNC_EXIT_CODE=$?

echo -e "---------------------------------------------\n"


# ==== 解析日志，显示同步结果 ====
if [ $SYNC_EXIT_CODE -eq 0 ]; then
  # 同步成功：提取同步和删除的文件信息
  echo -e "---------------------------------------------"
  echo -e "\033[32m[同步成功] 源路径与目标路径已保持一致！\033[0m"
  echo -e "---------------------------------------------\n"
  
  # 显示新增/更新的文件
  echo -e "---------------------------------------------"
  echo -e "\033[34m[同步内容] 已向目标路径新增/更新以下文件/目录：\033[0m"
  echo -e "---------------------------------------------"
  echo "$SYNC_LOG" | grep -E '^[^deleting].*$' | grep -v 'sent' | grep -v 'total size'
  echo -e ""  # 空行分隔
  
  # 显示删除的文件
  echo -e "---------------------------------------------"
  DELETE_FILES=$(echo "$SYNC_LOG" | grep '^deleting')
  if [ -n "$DELETE_FILES" ]; then
    echo -e "\033[31m[删除内容] 已从目标路径删除以下源路径不存在的文件/目录：\033[0m"
    echo -e "---------------------------------------------"
    echo "$DELETE_FILES" | sed 's/^deleting/  - 删除/'
  else
    echo -e "\033[34m[删除内容] 目标路径无冗余文件，无需删除\033[0m"
    echo -e "---------------------------------------------"
  fi
  echo -e ""  # 空行分隔
  
  # 显示统计信息
  echo -e "---------------------------------------------"
  SYNC_STAT=$(echo "$SYNC_LOG" | grep 'total size' | sed 's/total size is/总大小为/g; s/speedup is/同步加速比为/g')
  echo -e "\033[32m[同步统计]$SYNC_STAT\033[0m"
  echo -e "---------------------------------------------"
else
  # 同步失败：显示错误信息
  echo -e "---------------------------------------------"
  echo -e "\033[31m[同步失败] 执行过程中出现错误，请检查以下信息：\033[0m"
  echo -e "---------------------------------------------"
  echo "$SYNC_LOG" | grep -i 'error'
  echo -e "\n建议：检查源/目标路径是否挂载正常，或Windows共享是否有权限访问"
  echo -e "---------------------------------------------"
fi


echo -e "\n\033[32m=============================================\033[0m"
echo -e "\033[32m[脚本结束] 同步任务已完成\033[0m"
echo -e "\033[32m=============================================\033[0m"
